﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using METODESA.Server.Data.Exceptions;
using METODESA.Server.Data.METODESA.Entity;
using METODESA.Server.Data.METODESA.Factorys;
using METODESA.Server.Data.METODESA.Nhibernate;
using System.Security.Cryptography;
using NHibernate;

namespace Metodesa.Logic
{
    public class InstalacionLogic
    {

        public static IList<Servicio> processSearch(string search, string criteria)
        {
            if (criteria == "" || search == "")
            {
                return InstalacionDao.getAllInstalations();
            }
            else
            {

                switch (criteria)
                {
                    case "Codigo": return InstalacionDao.getInstalationByCode(int.Parse(search));

                    case "Fecha_Ini": return InstalacionDao.getInstalationsByDate(search);

                }

            }

            return null;
        }

        public static int add(string fecha_ini,string fecha_fin, double precio, string descripcion)
        {

            try
            {
                Servicio instalacion = FactoryInstalacion.getInstalacion(fecha_ini,fecha_fin,precio,descripcion);
                InstalacionDao.saveEntity(instalacion);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeSaved("La instalacion no se ha podido guardar /n" + e.Message);
            }
            return 0;
        }

        public static int update(int id,string fecha_ini,string fecha_fin,double precio, string descripcion)
        {
            try
            {
                Servicio instalacion = InstalacionDao.getInstalationsByCode(id);
                instalacion.FechaInicio = fecha_ini;
                instalacion.FechaFin = fecha_fin;
                instalacion.Precio = precio;
                instalacion.Descripcion = descripcion;
                InstalacionDao.updateEntity(instalacion);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeUpdated("La instalacion no se ha podido modificar " + e.Message);
            }
            return 0;
        }

        public static int delete(int id)
        {
            try
            {
                Servicio instalacion = InstalacionDao.getInstalationsByCode(id);

                if (instalacion.Borrable == 1)
                {
                    InstalacionDao.deleteEntity(instalacion);
                }
                else
                {
                    NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                    throw new EntityCouldntBeDeleted
                        ("La instalacion no se ha podido eliminar por que tiene una venta asociada");
                }
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new HibernateException
                    ("La instalacion no se ha podido eliminar " + e.Message);
            }
            return 0;
        }

    }
}
